package test06.stream.demo02.t09;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @author ZQX
 * @date 2025-04-08
 */
public class MainTest03 {
    public static void main(String[] args) {
        // 第一：定义数据源，并获取对应的流对象
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);

        // 第二：操作 - 收集流中的数据
        // 1.最大值 - 同 max 和 min 一样，必须是升序
        Optional<Integer> maxOptional1 = list.stream()
                .collect(Collectors.maxBy((o1, o2) -> o1 - o2));
        System.out.println("最大值："+maxOptional1.get());

        // Stream流的max方法也可以实现
        Optional<Integer> maxOptional2 = list.stream().max((o1, o2) -> o1 - o2);
        System.out.println("最大值："+maxOptional2.get());

        // 2.最小值
        Optional<Integer> minOptional1 = list.stream()
                .collect(Collectors.minBy((o1, o2) -> o1 - o2));
        System.out.println("最小值："+minOptional1.get());

        // Stream流的min方法也可以实现
        Optional<Integer> minOptional2 = list.stream().min((o1, o2) -> o1 - o2);
        System.out.println("最小值："+minOptional2.get());

        // 3.总数
        Integer sum1 = list.stream().collect(Collectors.summingInt(d -> d));
        System.out.println("总数："+sum1);

        Integer sum2 = list.stream().reduce(0, (a, b) -> a + b);
        System.out.println("总数："+sum2);

        // 4.平均值
        Double avg = list.stream().collect(Collectors.averagingInt(d -> d));
        System.out.println("平均数："+avg);

        // 5.统计数量
        Long count = list.stream().collect(Collectors.counting());
        System.out.println("数量为："+count);

    }
}
